www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第6章 无约束一维极值问题/minWP.m

        function [x,minf] = minWP(f,XMAX,sigma1,sigma2,alpha,eps)
format long;
if nargin == 5
    eps = 1.0e-6;
end
if sigma1<=0 || sigma1>1
    disp('sigma1参数不对!');
    x = NaN;
    minf = NaN;
    return;
else
    if sigma2 <= sigma1
        disp('sigma2参数不对!');
        x = NaN;
        minf = NaN;
        return;
    else
        if alpha <= 1
            disp('alpha参数不对!');
            x = NaN;
            minf = NaN;
            return;
        end
    end
end

    
df = diff(f);
f0 = subs(f, findsym(f),0);
df0 = subs(df, findsym(df),0);
a = 0;
b = XMAX;
k = 0;
t = (a+b)/2;

while 1
    ft = subs(f,findsym(f),t);
    f1 = f0 + sigma1*t*df0;
    if ft <= f1
        f2 = sigma2*t*df0;
        if ft >= f2
            x = t;
            break;
        else
            a = t;
            if b < XMAX
                t = (a+b)/2;
            else
                t = alpha*t;
            end
        end
    else
        b = t;
        t = (a+b)/2;
    end
    k = k+1;
end

minf =  subs(f,findsym(f),x);
format short;